Configurer plusieurs routes par défaut sous Linux

Le problème ?

Votre système fonctionne sous Linux avec plusieurs cartes d'interface réseau (NIC) physiques et chaque carte a sa propre passerelle par défaut. Par défaut, vous ne pouvez configurer qu'une seule passerelle par défaut sur un système.

Dans notre exemple, nous allons considérer 2 NICs (eth0 et eth1) activées avec une passerelle par défaut configurée sur l'interface eth0.

rt1rt1

Sur ce schéma, nous pouvons imaginer deux cas différents :

    1  - Le flux entrant dans eth0 sera renvoyé par eth0 (passerelle par défaut).

    2  - Le flux entrant dans eth1 sera renvoyé par eth0 (passerelle par défaut).

Dans le premier cas, il n'y a pas de problème, chaque carte réseau fonctionnera indépendamment mais dans le second cas, si vous avez configuré la passerelle par défaut sur eth0, quelle que soit la carte réseau qui reçoit la requête, elle répondra par eth0 qui est la passerelle par défaut.

Solution

La solution sera d'utiliser un programme appelé iproute2, qui est inclus et installé dans toutes les distributions Linux actuelles. Le résultat attendu est le suivant :

    1 - Le flux entrant dans eth0 est renvoyé par eth0.

    2 - Le flux entrant dans eth1 est renvoyé par eth1

Cela devrait donc ressembler au schéma suivant :

rt2rt2

Tout d'abord, vous devrez définir de nouvelles tables de routage dans le fichier /etc/iproute2/rt_tables en définissant vos propres tables. Ici, nous définissons deux nouvelles tables appelées rt0 et rt1 :

# reserved values

#

255     local

254     main

253     default

0       unspec

# local

#

125     rt0

225     rt1

Ensuite, vous devrez configurer vos cartes réseau (sous /etc/network/interfaces si vous êtes sur un système de type Debian) comme ci-dessous :

auto eth0

iface eth0 inet static

        address 192.168.50.250

        netmask 255.255.255.0

        network 192.168.50.0

        gateway 192.168.50.254

        broadcast 192.168.50.255

        post-up /sbin/ip route add default via 192.168.50.254 dev eth0 table rt0

        post-up /sbin/ip rule add from 192.168.50.0/24 table rt0

        pre-down /sbin/ip route del default via 192.168.50.254 dev eth0 table rt0

        pre-down /sbin/ip rule del from 192.168.50.0/24 table rt0

 

auto eth1

iface eth1 inet static

        address 10.0.10.10

        netmask 255.255.0.0

        network 10.0.0.0

        broadcast 10.0.255.255

        post-up /sbin/ip route add default via 10.0.255.254 dev eth1 table rt1

        post-up /sbin/ip rule add from 10.0.0.0/16 table rt1

        pre-down /sbin/ip route del default via 10.0.255.254 dev eth1 table rt1

        pre-down /sbin/ip rule del from 10.0.0.0/16 table rt1

 

Et maintenant, redémarrez votre service réseau pour mettre en place cette nouvelle configuration. Celle-ci sera permanente.

Vous pouvez maintenant vous connecter à votre serveur en utilisant les deux interfaces, et il répondra automatiquement et correctement par la bonne passerelle !